package com.sud.util;

import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.converter.ExcelToHtmlConverter;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.converter.PicturesManager;
import org.apache.poi.hwpf.converter.WordToHtmlConverter;
import org.apache.poi.hwpf.usermodel.Picture;
import org.apache.poi.hwpf.usermodel.PictureType;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFColor;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.converter.core.FileImageExtractor;
import org.apache.poi.xwpf.converter.core.FileURIResolver;
import org.apache.poi.xwpf.converter.xhtml.XHTMLConverter;
import org.apache.poi.xwpf.converter.xhtml.XHTMLOptions;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.select.Elements;
import org.w3c.dom.Document;
import sun.misc.BASE64Encoder;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 功能：将office转换成html
 * 作者：SUD
 * 时间：2020/7/23 9:29
 */
public class OfficeToHtmlUtil {

    public static void main(String[] a){
        String docxPath = "F:\\1.xlsx";
        String filePath = "F:\\images";
        try {
            File file = new File(docxPath);
            InputStream docxIs = new FileInputStream(file);
            String text = OfficeToHtmlUtil.excel2007ToHtml(docxIs,filePath);
            System.out.println(text);
        }catch (Exception e){
            e.printStackTrace();
        }
    }


    public static String getExcelInfo(Workbook wb,boolean isWithStyle){

        StringBuffer sb = new StringBuffer();
        Sheet sheet = null;
        int lastRowNum = -1;
        Row row = null;        //兼容
        Cell cell = null;    //兼容
        Map<String, String> map[] = null;
        for(int i=0;i<wb.getNumberOfSheets();i++){
            sheet = wb.getSheetAt(i);//获取第一个Sheet的内容
            lastRowNum = sheet.getLastRowNum();
            map = getRowSpanColSpanMap(sheet);

            sb.append("<h2>"+sheet.getSheetName()+"</h2>");
            sb.append("<table style='border-collapse:collapse;' width='100%'>");

            for (int rowNum = sheet.getFirstRowNum(); rowNum <= lastRowNum; rowNum++) {
                row = sheet.getRow(rowNum);
                if (row == null) {
                    sb.append("<tr><td > &nbsp;</td></tr>");
                    continue;
                }
                sb.append("<tr>");
                int lastColNum = row.getLastCellNum();
                for (int colNum = 0; colNum < lastColNum; colNum++) {
                    cell = row.getCell(colNum);
                    if (cell == null) {    //特殊情况 空白的单元格会返回null
                        sb.append("<td>&nbsp;</td>");
                        continue;
                    }

                    String stringValue = getCellValue(cell);
                    if (map[0].containsKey(rowNum + "," + colNum)) {
                        String pointString = map[0].get(rowNum + "," + colNum);
                        map[0].remove(rowNum + "," + colNum);
                        int bottomeRow = Integer.valueOf(pointString.split(",")[0]);
                        int bottomeCol = Integer.valueOf(pointString.split(",")[1]);
                        int rowSpan = bottomeRow - rowNum + 1;
                        int colSpan = bottomeCol - colNum + 1;
                        sb.append("<td rowspan= '" + rowSpan + "' colspan= '"+ colSpan + "' ");
                    } else if (map[1].containsKey(rowNum + "," + colNum)) {
                        map[1].remove(rowNum + "," + colNum);
                        continue;
                    } else {
                        sb.append("<td ");
                    }

                    //判断是否需要样式
                    if(isWithStyle){
                        dealExcelStyle(wb, sheet, cell, sb);//处理单元格样式
                    }

                    sb.append(">");
                    if (stringValue == null || "".equals(stringValue.trim())) {
                        sb.append(" &nbsp; ");
                    } else {
                        // 将ascii码为160的空格转换为html下的空格（&nbsp;）
                        sb.append(stringValue.replace(String.valueOf((char) 160),"&nbsp;"));
                    }
                    sb.append("</td>");
                }
                sb.append("</tr>");
            }

            sb.append("</table>");
        }
        return sb.toString();
    }

    private static Map<String, String>[] getRowSpanColSpanMap(Sheet sheet) {

        Map<String, String> map0 = new HashMap<String, String>();
        Map<String, String> map1 = new HashMap<String, String>();
        int mergedNum = sheet.getNumMergedRegions();
        CellRangeAddress range = null;
        for (int i = 0; i < mergedNum; i++) {
            range = sheet.getMergedRegion(i);
            int topRow = range.getFirstRow();
            int topCol = range.getFirstColumn();
            int bottomRow = range.getLastRow();
            int bottomCol = range.getLastColumn();
            map0.put(topRow + "," + topCol, bottomRow + "," + bottomCol);
            // System.out.println(topRow + "," + topCol + "," + bottomRow + "," + bottomCol);
            int tempRow = topRow;
            while (tempRow <= bottomRow) {
                int tempCol = topCol;
                while (tempCol <= bottomCol) {
                    map1.put(tempRow + "," + tempCol, "");
                    tempCol++;
                }
                tempRow++;
            }
            map1.remove(topRow + "," + topCol);
        }
        Map[] map = { map0, map1 };
        return map;
    }


    /**
     * 获取表格单元格Cell内容
     * @param cell
     * @return
     */
    private static String getCellValue(Cell cell) {

        String result = new String();
        switch (cell.getCellType()) {
            case Cell.CELL_TYPE_NUMERIC:// 数字类型
                if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
                    SimpleDateFormat sdf = null;
                    if (cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")) {
                        sdf = new SimpleDateFormat("HH:mm");
                    } else {// 日期
                        sdf = new SimpleDateFormat("yyyy-MM-dd");
                    }
                    Date date = cell.getDateCellValue();
                    result = sdf.format(date);
                } else if (cell.getCellStyle().getDataFormat() == 58) {
                    // 处理自定义日期格式：m月d日(通过判断单元格的格式id解决，id的值是58)
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    double value = cell.getNumericCellValue();
                    Date date = DateUtil
                            .getJavaDate(value);
                    result = sdf.format(date);
                } else {
                    double value = cell.getNumericCellValue();
                    CellStyle style = cell.getCellStyle();
                    DecimalFormat format = new DecimalFormat();
                    String temp = style.getDataFormatString();
                    // 单元格设置成常规
                    if (temp.equals("General")) {
                        format.applyPattern("#");
                    }
                    result = format.format(value);
                }
                break;
            case Cell.CELL_TYPE_STRING:// String类型
                result = cell.getRichStringCellValue().toString();
                break;
            case Cell.CELL_TYPE_BLANK:
                result = "";
                break;
            default:
                result = "";
                break;
        }
        return result;
    }

    /**
     * 处理表格样式
     * @param wb
     * @param sheet
     * @param cell
     * @param sb
     */
    private static void dealExcelStyle(Workbook wb, Sheet sheet, Cell cell, StringBuffer sb){

        CellStyle cellStyle = cell.getCellStyle();
        if (cellStyle != null) {
            short alignment = cellStyle.getAlignment();
            sb.append("align='" + convertAlignToHtml(alignment) + "' ");//单元格内容的水平对齐方式
            short verticalAlignment = cellStyle.getVerticalAlignment();
            sb.append("valign='"+ convertVerticalAlignToHtml(verticalAlignment)+ "' ");//单元格中内容的垂直排列方式

            if (wb instanceof XSSFWorkbook) {

                XSSFFont xf = ((XSSFCellStyle) cellStyle).getFont();
                short boldWeight = xf.getBoldweight();
                sb.append("style='");
                sb.append("font-weight:" + boldWeight + ";"); // 字体加粗
                sb.append("font-size: " + xf.getFontHeight() / 2 + "%;"); // 字体大小
                int columnWidth = sheet.getColumnWidth(cell.getColumnIndex()) ;
                sb.append("width:" + columnWidth + "px;");

                XSSFColor xc = xf.getXSSFColor();
                if (xc != null && !"".equals(xc)) {
                    sb.append("color:#" + xc.getARGBHex().substring(2) + ";"); // 字体颜色
                }

                XSSFColor bgColor = (XSSFColor) cellStyle.getFillForegroundColorColor();
                //System.out.println("************************************");
                //System.out.println("BackgroundColorColor: "+cellStyle.getFillBackgroundColorColor());
                //System.out.println("ForegroundColor: "+cellStyle.getFillForegroundColor());//0
                //System.out.println("BackgroundColorColor: "+cellStyle.getFillBackgroundColorColor());
                //System.out.println("ForegroundColorColor: "+cellStyle.getFillForegroundColorColor());
                //String bgColorStr = bgColor.getARGBHex();
                //System.out.println("bgColorStr: "+bgColorStr);
                if (bgColor != null && !"".equals(bgColor)) {
                    sb.append("background-color:#" + bgColor.getARGBHex().substring(2) + ";"); // 背景颜色
                }
                sb.append(getBorderStyle(0,cellStyle.getBorderTop(), ((XSSFCellStyle) cellStyle).getTopBorderXSSFColor()));
                sb.append(getBorderStyle(1,cellStyle.getBorderRight(), ((XSSFCellStyle) cellStyle).getRightBorderXSSFColor()));
                sb.append(getBorderStyle(2,cellStyle.getBorderBottom(), ((XSSFCellStyle) cellStyle).getBottomBorderXSSFColor()));
                sb.append(getBorderStyle(3,cellStyle.getBorderLeft(), ((XSSFCellStyle) cellStyle).getLeftBorderXSSFColor()));

            }else if(wb instanceof HSSFWorkbook){

                HSSFFont hf = ((HSSFCellStyle) cellStyle).getFont(wb);
                short boldWeight = hf.getBoldweight();
                short fontColor = hf.getColor();
                sb.append("style='");
                HSSFPalette palette = ((HSSFWorkbook) wb).getCustomPalette(); // 类HSSFPalette用于求的颜色的国际标准形式
                HSSFColor hc = palette.getColor(fontColor);
                sb.append("font-weight:" + boldWeight + ";"); // 字体加粗
                sb.append("font-size: " + hf.getFontHeight() / 2 + "%;"); // 字体大小
                String fontColorStr = convertToStardColor(hc);
                if (fontColorStr != null && !"".equals(fontColorStr.trim())) {
                    sb.append("color:" + fontColorStr + ";"); // 字体颜色
                }
                int columnWidth = sheet.getColumnWidth(cell.getColumnIndex()) ;
                sb.append("width:" + columnWidth + "px;");
                short bgColor = cellStyle.getFillForegroundColor();
                hc = palette.getColor(bgColor);
                String bgColorStr = convertToStardColor(hc);
                if (bgColorStr != null && !"".equals(bgColorStr.trim())) {
                    sb.append("background-color:" + bgColorStr + ";"); // 背景颜色
                }
                sb.append( getBorderStyle(palette,0,cellStyle.getBorderTop(),cellStyle.getTopBorderColor()));
                sb.append( getBorderStyle(palette,1,cellStyle.getBorderRight(),cellStyle.getRightBorderColor()));
                sb.append( getBorderStyle(palette,3,cellStyle.getBorderLeft(),cellStyle.getLeftBorderColor()));
                sb.append( getBorderStyle(palette,2,cellStyle.getBorderBottom(),cellStyle.getBottomBorderColor()));
            }

            sb.append("' ");
        }
    }

    /**
     * 单元格内容的水平对齐方式
     * @param alignment
     * @return
     */
    private static String convertAlignToHtml(short alignment) {

        String align = "left";
        switch (alignment) {
            case CellStyle.ALIGN_LEFT:
                align = "left";
                break;
            case CellStyle.ALIGN_CENTER:
                align = "center";
                break;
            case CellStyle.ALIGN_RIGHT:
                align = "right";
                break;
            default:
                break;
        }
        return align;
    }

    /**
     * 单元格中内容的垂直排列方式
     * @param verticalAlignment
     * @return
     */
    private static String convertVerticalAlignToHtml(short verticalAlignment) {

        String valign = "middle";
        switch (verticalAlignment) {
            case CellStyle.VERTICAL_BOTTOM:
                valign = "bottom";
                break;
            case CellStyle.VERTICAL_CENTER:
                valign = "center";
                break;
            case CellStyle.VERTICAL_TOP:
                valign = "top";
                break;
            default:
                break;
        }
        return valign;
    }

    private static String convertToStardColor(HSSFColor hc) {

        StringBuffer sb = new StringBuffer("");
        if (hc != null) {
            if (HSSFColor.AUTOMATIC.index == hc.getIndex()) {
                return null;
            }
            sb.append("#");
            for (int i = 0; i < hc.getTriplet().length; i++) {
                sb.append(fillWithZero(Integer.toHexString(hc.getTriplet()[i])));
            }
        }

        return sb.toString();
    }

    private static String fillWithZero(String str) {
        if (str != null && str.length() < 2) {
            return "0" + str;
        }
        return str;
    }

    static String[] bordesr={"border-top:","border-right:","border-bottom:","border-left:"};
    static String[] borderStyles={"solid ","solid ","solid ","solid ","solid ","solid ","solid ","solid ","solid ","solid","solid","solid","solid","solid"};

    private static  String getBorderStyle(HSSFPalette palette , int b, short s, short t){

        if(s==0)return  bordesr[b]+borderStyles[s]+"#d0d7e5 1px;";;
        String borderColorStr = convertToStardColor( palette.getColor(t));
        borderColorStr=borderColorStr==null|| borderColorStr.length()<1?"#000000":borderColorStr;
        return bordesr[b]+borderStyles[s]+borderColorStr+" 1px;";

    }

    private static  String getBorderStyle(int b,short s, XSSFColor xc){

        if(s==0)return  bordesr[b]+borderStyles[s]+"#d0d7e5 1px;";;
        if (xc != null && !"".equals(xc)) {
            String borderColorStr = xc.getARGBHex();//t.getARGBHex();
            borderColorStr=borderColorStr==null|| borderColorStr.length()<1?"#000000":borderColorStr.substring(2);
            return bordesr[b]+borderStyles[s]+borderColorStr+" 1px;";
        }

        return "";
    }
    /**
     * 2007版word转html
     * @param is
     * @param filePath
     * @return
     * @throws Exception
     */
    public static String word2007ToHtml(InputStream is, String filePath) throws Exception {

        File file = new File(filePath, UUID.randomUUID().toString());
        if (!file.exists()) {
            file.mkdirs();
        }
        filePath = file.getPath();

        XWPFDocument document = new XWPFDocument(is);
        XHTMLOptions options = XHTMLOptions.create().URIResolver(
                new FileURIResolver(new File(filePath)));
        options.setExtractor(new FileImageExtractor(new File(filePath)));
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        XHTMLConverter.getInstance().convert(document, baos, options);
        String content = baos.toString("UTF-8");
        baos.close();
        content = htmlImgToBase64(content,null);

        removeDir(file);

        /*String text = content
                .replace("<html>", "").replace("<head>", "").replace("<body>", "")
                .replace("</head>", "").replace("</body>", "").replace("</html>", "");*/
        return content;
    }

    /**
     * 2003版word转html
     * @param is
     * @param filePath
     * @return
     * @throws Exception
     */
    public static String word2003ToHtml(InputStream is, String filePath) throws Exception {
        File file = new File(filePath, UUID.randomUUID().toString());
        if (!file.exists()) {
            file.mkdirs();
        }
        filePath = file.getPath();

        HWPFDocument wordDocument = new HWPFDocument(is);
        WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(
                DocumentBuilderFactory.newInstance().newDocumentBuilder()
                        .newDocument());
        wordToHtmlConverter.setPicturesManager(new PicturesManager() {
            public String savePicture(byte[] content, PictureType pictureType,
                                      String suggestedName, float widthInches, float heightInches) {
                return suggestedName;
            }
        });
        wordToHtmlConverter.processDocument(wordDocument);
        String pathStr = filePath + "/word/" + UUID.randomUUID().toString() + "/";
        File pathFile = new File(pathStr);
        if (!pathFile.exists()) {
            pathFile.mkdirs();
        }
        List pics = wordDocument.getPicturesTable().getAllPictures();
        if (pics != null) {
            for (int i = 0; i < pics.size(); i++) {
                Picture pic = (Picture) pics.get(i);
                try {
                    pic.writeImageContent(new FileOutputStream(pathStr + pic.suggestFullFileName()));
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            }
        }
        Document htmlDocument = wordToHtmlConverter.getDocument();
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        DOMSource domSource = new DOMSource(htmlDocument);
        StreamResult streamResult = new StreamResult(outStream);
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer serializer = tf.newTransformer();
        serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
        serializer.setOutputProperty(OutputKeys.INDENT, "yes");
        serializer.setOutputProperty(OutputKeys.METHOD, "html");
        serializer.transform(domSource, streamResult);
        outStream.close();
        String text = new String(outStream.toByteArray(), "UTF-8");


        text = htmlImgToBase64(text,pathStr);
        removeDir(file);

        /*text = text.replace("<html>", "")
                .replace("<head>", "")
                .replace("<body>", "")
                .replace("</head>", "")
                .replace("</body>", "")
                .replace("</html>", "");*/
        return text;
    }

    /**
     * 2003版excel转html
     * @param is
     * @param filePath
     */
    public static String excel2003ToHtml(InputStream is, String filePath) throws Exception {
        File file = new File(filePath, UUID.randomUUID().toString());
        if (!file.exists()) {
            file.mkdirs();
        }
        filePath = file.getPath();

        String htmlStr = null;
        HSSFWorkbook excelBook = new HSSFWorkbook(is);
        ExcelToHtmlConverter excelToHtmlConverter = new ExcelToHtmlConverter(
                DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());

        excelToHtmlConverter.setOutputColumnHeaders(false);
        excelToHtmlConverter.setOutputRowNumbers(false);
        excelToHtmlConverter.processWorkbook(excelBook);

        String pathStr = filePath + "/excel/" + UUID.randomUUID().toString() + "/";
        File pathFile = new File(pathStr);
        if (!pathFile.exists()) {
            pathFile.mkdirs();
        }
        List pics = excelBook.getAllPictures();
        if (pics != null) {
            for (int i = 0; i < pics.size(); i++) {
                Picture pic = (Picture) pics.get(i);
                try {
                    pic.writeImageContent(new FileOutputStream(pathStr + pic.suggestFullFileName()));
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            }
        }
        Document e = excelToHtmlConverter.getDocument();
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        DOMSource domSource = new DOMSource(e);
        StreamResult streamResult = new StreamResult(out);
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer serializer = tf.newTransformer();
        serializer.setOutputProperty("encoding", "UTF-8");
        serializer.setOutputProperty("indent", "no");
        serializer.setOutputProperty("method", "html");
        serializer.transform(domSource, streamResult);
        out.close();
        htmlStr = new String(out.toByteArray(), "UTF-8");

        htmlStr = htmlImgToBase64(htmlStr,null);
        removeDir(file);


        //删除掉无用的sheet
        org.jsoup.nodes.Document doc = Jsoup.parse(htmlStr);
        Elements elements = doc.select("body");
        int tabCount = -1;
        int h2Index = -1;
        if(elements.size()>0){
            List<Node> list = elements.get(0).childNodes();
            for(Node node : list){
                if(node instanceof Element){
                    String tag = ((Element) node).tag().getName();
                    if(tag.equals("h2")){
                        if(tabCount == 0){
                            Elements h2elements = doc.select("h2");
                            if(h2elements.size()>0){
                                h2elements.get(h2Index).remove();
                            }
                        }
                        tabCount = 0;
                        h2Index++;
                    }else if(tag.equals("table")){
                        tabCount++;
                    }
                }
            }
            if(list.size()>0 && tabCount == 0){
                Elements h2elements = doc.select("h2");
                if(h2elements.size()>0){
                    h2elements.get(h2elements.size()-1).remove();
                }
            }
        }
        htmlStr = doc.html();

        /*htmlStr = htmlStr.replace("<html>", "").replace("<head>", "").replace("<body>", "")
                .replace("</head>", "").replace("</body>", "").replace("</html>", "")
                .replace("<title>asus", "")
                .replace("</title>", "")
                .replace("body", "div")
                .replace("<meta content=\"asus\" name=\"author\">", "")
                .replace("<META http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">", "")
                .replace("<META http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">", "");*/
        return htmlStr;
    }

    /**
     * 2007版excel转html
     * @param is
     * @param filePath
     * @return
     */
    public static String excel2007ToHtml(InputStream is, String filePath) throws Exception {
        //2007转2003
        XSSFWorkbook workbook = new XSSFWorkbook(is);
        String htmlExcel = OfficeToHtmlUtil.getExcelInfo(workbook,true);
        htmlExcel = "<html><body>" + htmlExcel + "</body></html>";

        return htmlExcel;
    }

    /**
     * 将html中的img标签src指向的图片链接转换成base64
     * @param html
     * @return
     */
    private static String htmlImgToBase64(String html,String path) throws Exception{
        Element element = null;

        org.jsoup.nodes.Document doc = Jsoup.parse(html);
        Elements elements = doc.select("img");

        Elements elementsTitle = doc.select("title");
        elementsTitle.remove();

        Elements elementsMeta = doc.select("meta");
        for(int i=0;i<elementsMeta.size();i++){
            element = elementsMeta.get(i);
            element.remove();
        }

        String src = null;
        File file = null;
        InputStream is = null;
        byte[] imgData = null;
        String base64Type = null;
        String base64Data = null;
        String fileType = null;
        BASE64Encoder encoder = new BASE64Encoder();
        for(int i=0;i<elements.size();i++){
            element = elements.get(i);
            src = element.attr("src");
            file = new File(src);
            if(file.exists()){
                is = new FileInputStream(file);
                imgData = new byte[is.available()];
                is.read(imgData);
                is.close();
                fileType = FileTypeUtils.getFileTypeByStream(imgData);
                if(StringUtils.isNotEmpty(fileType)){
                    base64Type = "data:image/" + fileType + ";base64,";
                    base64Data = encoder.encode(imgData);
                    element.attr("src",base64Type+base64Data);
                }else{
                    element.remove();
                }

            }else{
                file = new File(path+src);
                if(file.exists()){
                    is = new FileInputStream(file);
                    imgData = new byte[is.available()];
                    is.read(imgData);
                    is.close();
                    fileType = FileTypeUtils.getFileTypeByStream(imgData);
                    if(StringUtils.isNotEmpty(fileType)){
                        base64Type = "data:image/" + fileType + ";base64,";
                        base64Data = encoder.encode(imgData);
                        element.attr("src",base64Type+base64Data);
                    }else{
                        element.remove();
                    }
                }
            }
        }
        return doc.html();
    }

    /**
     * 删除目录以及目录中的文件
     * @param dir
     */
    public static void removeDir(File dir) {
        File[] files = dir.listFiles();
        for(int i=0; i<files.length ; i++){
            if(files[i].isDirectory()){
                removeDir(files[i]);
            }else {
                files[i].delete();
            }
            files[i].delete();
        }
        dir.delete();
    }
}
